package com.yyl.rbacs.utils;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yyl.rbacs.sys.entity.SysUser;

import java.util.Map;

/**
 * @BelongsProject: rbacs
 * @BelongsPackage: com.yyl.rbacs.utils
 * @Author: YuanSir
 * @CreateTime: 2022-11-01  09:21
 * @Description:
 * @Version: 1.0
 */

public class PageQueryUtil<T> {
    
    /**
     * 如果完全按照 params 中的排序字段进行排序，就用这个方法
     * @param params
     * @return
     * @param <T>
     */
    public static <T> Page<T> getPage(Map<String, String> params){
    
        return getPage(params, null, "asc");
    }
    
    
    // 如果 params 中有排序字段，就按照该排序字段设置排序
    // 如果 params 中没有传递排序字段，可以给定一个默认排序字段，和默认排序顺序
    /**
     * 如果 params 中没有指定排序字段，向使用默认的排序字段就用该方法
     * @param params
     * @param colum
     * @param sort
     * @return
     * @param <T>
     */
    public static <T> Page<T> getPage(Map<String, String> params, String colum, String sort) {
    
        Long currentPage = Long.valueOf(params.get("page")); // 当前页号
    
        Long limit = Long.valueOf(params.get("limit")); // 页大小
    
        String sidx = SQLFilter.sqlInject(params.get("sidx"));  // 排序字段
    
        String order = params.get("order"); // 升序/降序
    
        Page<T> page = new Page<>(currentPage, limit); // 创建分页对象
    
        //当页面传递了排序字段时
        if (StringUtils.isNotBlank(sidx)) {
            if (StringUtils.isNotBlank(order) && order.equals("desc")){
    
                page.addOrder(OrderItem.desc(sidx));
            
            } else {
    
                page.addOrder(OrderItem.asc(sidx));
            
            }
            return page;
        }
        
        //如果默认排序字段为null，那么不生成排序语句
        if (StringUtils.isBlank(colum)) {
            return page;
        }
        
        //按照传递的默认字段进行排序
        if (StringUtils.isNotBlank(sort)) {
            
            if (sort.equals("desc")){
    
                page.addOrder(OrderItem.desc(colum));
    
            } else {
    
                page.addOrder(OrderItem.asc(colum));
                
            }
            
        }
    
        return page;
        
    }
    
}
